package com.zjsru.plan2024.normal;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 移除字母异位词后的结果数组
 * 0 < i < words.length
 * words[i - 1] 和 words[i] 是 字母异位词 。
 * \
 * 字母异位词 是由重新排列源单词的字母得到的一个新单词，所有源单词中的字母通常恰好只用一次。例如，"dacb" 是 "abdc" 的一个字母异位词。
 * \
 * @Author: cookLee
 * @Date: 2024-02-19
 */
public class RemoveAnagrams {

    /**
     * 主
     * \
     * 输入：words = ["abba","baba","bbaa","cd","cd"]
     * 输出：["abba","cd"]
     * 解释：
     * 获取结果数组的方法之一是执行下述步骤：
     * - 由于 words[2] = "bbaa" 和 words[1] = "baba" 是字母异位词，选择下标 2 并删除 words[2] 。
     *   现在 words = ["abba","baba","cd","cd"] 。
     * - 由于 words[1] = "baba" 和 words[0] = "abba" 是字母异位词，选择下标 1 并删除 words[1] 。
     *   现在 words = ["abba","cd","cd"] 。
     * - 由于 words[2] = "cd" 和 words[1] = "cd" 是字母异位词，选择下标 2 并删除 words[2] 。
     *   现在 words = ["abba","cd"] 。
     * 无法再执行任何操作，所以 ["abba","cd"] 是最终答案。
     * \
     * @param args args
     */
    public static void main(String[] args) {
        RemoveAnagrams removeAnagrams = new RemoveAnagrams();
        String[] words = new String[]{"abba","baba","bbaa","cd","cd"};
        System.out.println(removeAnagrams.removeAnagrams(words));
    }

    /**
     * 模拟
     *
     * @param words 字词
     * @return {@link List}<{@link String}>
     */
    public List<String> removeAnagrams(String[] words) {
        List<String> ans = new ArrayList<>();
        //定义一个单词用来比较是否是字母异位词
        String prev = "";
        for (String word : words) {
            if (!this.helper(word, prev)) {
                ans.add(word);
                //如果满足条件，更新最新的字母异位词
                prev = word;
            }
        }
        return ans;
    }

    /**
     * 判断助手类
     *
     * @param word 字
     * @param prev prev
     * @return boolean
     */
    private boolean helper(String word, String prev) {
        //长度是否相等
        if (word.length() != prev.length()) {
            return false;
        }
        //组成字母是否相同
        char[] wordArray = word.toCharArray();
        char[] prevArray = prev.toCharArray();
        //排序
        Arrays.sort(wordArray);
        Arrays.sort(prevArray);
        return Arrays.equals(wordArray, prevArray);
    }


}
